Shader "Custom/M4"
{
	Properties{
		_Diffuse("Diffuse Color",Color)=(1,1,1,1)
	}

    SubShader{
    	Pass{
    	
    		Tags{
    			//使用的光照模型
    			"LightModel" = "ForwardBase"
    		}
    	
    		CGPROGRAM
    		
    		//引入Unity的光照文件 => 相对于C#中使用 using 
    		#include "Lighting.cginc" 
    		//取得第一个直射光的颜色 => _LightColor0 , 第一个直射光的位置 => _WorldSpaceLightPos0
    		
    		//声明顶点函数和片元函数
    		#pragma vertex vert
    		#pragma fragment frag
    		
    		fixed4 _Diffuse;
    		
    		struct a2v{
    			// 告诉Unity把模型空间下的顶点坐标填充给 vertex
    			float4 vertex : POSITION;
    			//获取到模型空间下的法线
    			float3 normal : NORMAL;
    		};
    		
    		struct v2f{
    			float4 position : SV_POSITION;
    			fixed3 color : COLOR;
    		};
    		
    		v2f vert(a2v v) {
    			v2f f;
    			
    			f.position = UnityObjectToClipPos(v.vertex);
    			
    			//获取环境光
    			fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;
    			
    			//问:为什么说光的方向就是光的位置?
    			//答:对于每个顶点来说,光的位置就是光的方向,因为光是平行光
    			//_WorldSpaceLightPos0.xyz 是一个向量,而 normalize就是将这个向量给归一化
    			fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
    			//获取法线的方向
    			fixed3 normalDir = normalize(mul(v.normal,(float3x3)unity_WorldToObject));
    			//获取漫反射的颜色,如果需要外部来控制颜色的改变只需要乘以颜色值即可,如:_Diffuse.rgb
    			fixed3 diffuse = _LightColor0.rgb * max(dot(normalDir,lightDir),0) * _Diffuse.rgb;
    			f.color = diffuse + ambient;//漫反射 + 环境光 , 加了环境光之后,模型的亮度增加了
    			
    			return f;
    		}
    		
    		fixed4 frag(v2f f) : SV_Target{
    			return fixed4(f.color,1);
    		}
    		ENDCG
    	}
    }
    Fallback "VertexLit"
}